package router

import (
	"github.com/gin-gonic/gin"
	"vben-api/pkg/svc"
)

// Router 路由接口
type Router interface {
	Route(r *gin.Engine, svcCtx *svc.ServiceContext)
}

var routers []Router

// InitRouter 初始化路由设置。
// 该函数接收一个gin.Engine类型的参数r，用于注册路由。
// 它通过遍历routers切片中的每个元素，并调用其Route方法来注册相应的路由规则。
// 这种设计模式允许灵活地添加和管理不同的路由处理器。
func InitRouter(r *gin.Engine, svcCtx *svc.ServiceContext) {
	// 遍历routers切片中的每个元素
	for _, router := range routers {
		// 调用每个router的Route方法来注册路由规则
		router.Route(r, svcCtx)
	}
}

// Register 注册一个或多个路由处理器。
// 这个函数使得在程序运行时可以动态地添加新的路由规则，增强了程序的灵活性和扩展性。
// 参数:
//
//	ro ...Router: 一个或多个路由处理器(Router)。使用变长参数的形式，允许注册任意数量的路由处理器。
func Register(ro ...Router) {
	// 将传入的路由处理器追加到全局路由数组中。
	// 这里使用了切片的append函数，它可以动态地扩展切片，将新的元素添加到切片的末尾。
	routers = append(routers, ro...)
}
